#include "preferencias.h"
#include "asistentexml.h"

#define RUTA_ARCHIVO_CONFIGURACION "../config/preferencias.xml"

Preferencias::Preferencias()
{    
    //asignarValor(PARAMETRO_MIDI_IN, );
    asignarValor(PARAMETRO_TEMPO, "120");
    asignarValor(PARAMETRO_REPRODUCIR_SONIDO_METRONOMO, "0");
}

Preferencias::~Preferencias()
{

}

void Preferencias::asignarValor(const QString& nombre, const QString& valor)
{
    mapaParametros.insert(nombre, valor);
}

QString Preferencias::obtenerValor(const QString& nombre)
{
    return mapaParametros.value(nombre);
}

QStringList Preferencias::getListaNombresParametros()
{
    return mapaParametros.keys();
}

void Preferencias::serializar()
{
    AsistenteXml asistente;
	asistente.nuevo("preferencias");

	QDomElement elementoRaiz = asistente.getElementoRaiz();
  
    foreach (QString nombre, getListaNombresParametros()) {
        QString valor = obtenerValor(nombre);
        QDomElement elementoParametro = asistente.escribirElemento(elementoRaiz, "parametro");
        asistente.escribirAtributo(elementoParametro, "nombre", nombre);
        asistente.escribirAtributo(elementoParametro, "valor", valor);
    }

	asistente.guardarArchivo(RUTA_ARCHIVO_CONFIGURACION);
}

void Preferencias::deserializar()
{
    AsistenteXml asistente;
	asistente.abrirArchivo(RUTA_ARCHIVO_CONFIGURACION);

	QDomElement elementoRaiz = asistente.getElementoRaiz();
    
    QList<QDomElement> listaElementosParametro = asistente.leerElementos(elementoRaiz, "parametro");
    foreach (QDomElement elementoParametro, listaElementosParametro) {
        QString nombre = asistente.leerAtributo(elementoParametro, "nombre");
        QString valor = asistente.leerAtributo(elementoParametro, "valor");
        asignarValor(nombre, valor);
    }
}